﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Text.RegularExpressions;
using System.Web;
using System.Text;
using Extentions;
using Microsoft.AspNetCore.Http;
using Microsoft.Data.SqlClient;
using TrainingReminderSystem.Model;

namespace TrainingReminderSystem.Bll
{
    /// <summary>
    /// 打印逻辑层
    /// </summary>
    public partial class SysPrintTemplateBll : PcLoginedBll
    {
        //private static readonly object Sync = new object();

        ///// <summary>
        ///// 添加和修改的时候 验证数据
        ///// </summary>
        ///// <param name="model"></param>
        ///// <param name="msg">提示语句</param>
        ///// <param name="isAdd">添加还是修改,可以不管此参数</param>
        ///// <returns>是否通过,true表示验证通过,false代表验证没有通过</returns>
        //public AjaxResult<dynamic> Validate(SysPrintTemplate model, out string msg, bool isAdd)
        //{
        //    msg = string.Empty;
        //    if (model == null)
        //    {
        //        msg = "提交数据出错,请刷新后重试!";
        //        return AjaxResult<dynamic>.ErrorResult(msg);
        //    }

        //    if (string.IsNullOrEmpty(model.PrintTemplateName))
        //    {
        //        msg = "请输入模板名称";
        //        return AjaxResult<dynamic>.ErrorResult(msg);
        //    }

        //    var db = Db;
        //    if (db.SysPrintTemplate.Any(m => m.PrintTemplateName == model.PrintTemplateName && m.PrintTemplateID != model.PrintTemplateID))
        //    {
        //        msg = "您输入的模板名称已存在";
        //        return AjaxResult<dynamic>.ErrorResult(msg);
        //    }

        //    model.SysEmployeeID = CurrentEmployee.SysEmployeeID;
        //    model.CreateTime = DateTime.Now;
        //    return AjaxResult<dynamic>.SuccessResult();
        //}

        ///// <summary>
        ///// 得到单对象,返回值有可能为null
        ///// </summary>
        ///// <param name="id">主键值</param>
        ///// <returns></returns>
        //public SysPrintTemplate GetModel(int id)
        //{
        //    var model = Db.SysPrintTemplate.FirstOrDefault(m => m.PrintTemplateID == id);
        //    return model;
        //}

        //public AjaxResult<dynamic> GetPrintTemplateVariable(EnumPrintType type)
        //{
        //    AjaxResult<dynamic> r = new AjaxResult<dynamic>() { S = false };
        //    lock (Sync)
        //    {
        //        using (var db = Db)
        //        {
        //            try
        //            {
        //                var listmodel = db.SysBasePrintTemplateVariable.Where(t => t.EnumPrintType == type || t.EnumPrintType == EnumPrintType.通用字段).OrderBy(t => t.EnumPrintType);
        //                r.R = listmodel.ToList();
        //                r.S = true;
        //            }
        //            catch { }
        //        }
        //    }
        //    return r;
        //}

        ///// <summary>
        ///// 添加数据
        ///// </summary>
        ///// <param name="model">添加的对象,成功之后model对象的ContractID能得到ContractID</param>
        ///// <returns></returns>
        //public AjaxResult<int> Add(SysPrintTemplate model)
        //{
        //    AjaxResult<int> r = new AjaxResult<int>() { S = false };
        //    string msg;
        //    if (!Validate(model, out msg, true))
        //    {
        //        r.Msg = msg;
        //        return r;
        //    }
        //    lock (Sync)
        //    {
        //        using (var db = Db)
        //        {
        //            db.SysPrintTemplate.Add(model);
        //            AddLog(db, model, EnumLogType.新建);
        //            bool isSuccess = db.SaveChanges() > 0;
        //            r.S = isSuccess;
        //            r.Msg = isSuccess ? "添加成功" : "添加失败,请重试!";
        //            r.R = model.PrintTemplateID;
        //            return r;
        //        }
        //    }
        //}

        ///// <summary>
        ///// 修改
        ///// </summary>
        ///// <param name="model">添加的对象,成功之后model对象的ContractID能得到ContractID</param>
        ///// <returns></returns>
        //public AjaxResult<int> Update(SysPrintTemplate model)
        //{
        //    AjaxResult<int> r = new AjaxResult<int>() { S = false };
        //    string msg;
        //    if (!Validate(model, out msg, false))
        //    {
        //        r.Msg = msg;
        //        return r;
        //    }
        //    using (var db = Db)
        //    {
        //        var beforeModel = db.SysPrintTemplate.FirstOrDefault(m => m.PrintTemplateID == model.PrintTemplateID && m.StoreID == CurrentStore.StoreID);
        //        if (beforeModel == null)
        //        {
        //            r.Msg = HasNoData;
        //            return r;
        //        }

        //        beforeModel.PrintTemplateName = model.PrintTemplateName;
        //        beforeModel.PaperWidth = model.PaperWidth;
        //        beforeModel.PaperHeight = model.PaperHeight;
        //        beforeModel.IsDefault = model.IsDefault;
        //        beforeModel.PrintTemplateContent = model.PrintTemplateContent;
        //        beforeModel.Printer = model.Printer;
        //        beforeModel.Remark = model.Remark;
        //        beforeModel.Status = model.Status;
        //        beforeModel.SysEmployeeID = model.SysEmployeeID;
        //        beforeModel.Remark = model.Remark;
        //        beforeModel.ReadOnly = model.ReadOnly;
        //        AddLog(db, model, EnumLogType.修改);
        //        var isSuccess = db.SaveChanges() >= 0;
        //        r.S = isSuccess;
        //        r.Msg = isSuccess ? "修改成功" : "修改失败,请重试!";
        //        r.R = model.PrintTemplateID;
        //        return r;
        //    }
        //}

        //public AjaxResult<int> UpdateContactState(int PrintTemplateID)
        //{
        //    AjaxResult<int> r = new AjaxResult<int>() { S = false };
        //    using (var db = Db)
        //    {
        //        var beforeModel = db.SysPrintTemplate.FirstOrDefault(m => m.PrintTemplateID == PrintTemplateID);
        //        if (beforeModel == null)
        //        {
        //            r.Msg = HasNoData;
        //            return r;
        //        }

        //        var status = beforeModel.Status;
        //        if (status == true)
        //        {
        //            beforeModel.Status = false;
        //        }
        //        else
        //        {
        //            beforeModel.Status = true;
        //        }

        //        AddLog(db, beforeModel, EnumLogType.修改);
        //        var isSuccess = db.SaveChanges() >= 0;
        //        r.S = isSuccess;
        //        r.Msg = isSuccess ? "修改成功" : "修改失败,请重试!";

        //        return r;
        //    }
        //}

        //#region 分页方法

        ///// <summary>
        ///// 分页方法
        ///// </summary>
        ///// <param name="pageIndex"></param>
        ///// <param name="pageSize">最小为1,最大为50,不在此范围内则默认为20</param>
        ///// <param name="form">表单</param>
        ///// <param name="sortField"></param>
        ///// <param name="asc"></param>
        ///// <returns></returns>
        //public AjaxResult<dynamic> GetListByPage(int pageIndex, int pageSize, FormCollection form = null,
        //                                string sortField = "Status", bool asc = true)
        //{
        //    var db = Db;
        //    AjaxResult<dynamic> R = new AjaxResult<dynamic>() { S = true };

        //    #region 查询条件

        //    int StoreID = CurrentStore.StoreID;
        //    int parentStoreID = CurrentStore.GetParentStoreID();
        //    Expression<Func<SysPrintTemplate, bool>> where = m => (m.StoreID == StoreID);//InitSearch<QB_CustomerInfo>();

        //    #endregion 查询条件

        //    if (form != null)
        //    {
        //        //pageIndex = 1;
        //        //pageSize = MaxPageSize;

        //        if (!string.IsNullOrEmpty(form["PrintTemplateName"]))
        //        {
        //            string PrintTemplateName = form["PrintTemplateName"];
        //            where = where.ExAnd(m => m.PrintTemplateName.Contains(PrintTemplateName));
        //        }
        //        if (!string.IsNullOrEmpty(form["EnumPrintType"]))
        //        {
        //            var EnumPrintType = (EnumPrintType)form["EnumPrintType"].ExToInt32();
        //            where = where.ExAnd(m => m.EnumPrintType == EnumPrintType);
        //        }
        //    }
        //    int counts;
        //    var list = db.SysPrintTemplate.ExGetListByPage(pageIndex, pageSize, out counts, where, sortField, asc);

        //    R.C = counts;
        //    R.R = list.OrderByDescending(t => t.IsDefault).ThenByDescending(t => t.Status).Select(m => new
        //    {
        //        PrintTemplateID = m.PrintTemplateID,
        //        PrintTemplateName = m.PrintTemplateName,
        //        PaperWidth = m.PaperWidth,
        //        PaperHeight = m.PaperHeight,
        //        IsDefault = m.IsDefault,
        //        PrintTemplateContent = m.PrintTemplateContent,
        //        Printer = m.Printer,
        //        StoreID = m.StoreID,
        //        SysEmployeeID = m.SysEmployeeID,
        //        CreateTime = m.CreateTime,
        //        Remark = m.Remark,
        //        Status = m.Status,
        //        ReadOnly = m.ReadOnly,
        //        StoreName = m.QB_Store.StoreName,
        //        EmployeeName = m.QB_OperatorInfo.QB_EmployeeInfo1.EmployeeName,
        //        EnumPrintType = m.EnumPrintType.ToString()
        //    });

        //    return R;
        //}

        //#endregion 分页方法



        //public AjaxResult<PrintOptions> Print(int printTemplateId, string[] Params)
        //{
        //    using (var db = Db)
        //    {
        //        var temp = db.SysPrintTemplate.AsNoTracking().FirstOrDefault(t => t.PrintTemplateID == printTemplateId);
        //        if (temp == null)
        //        {
        //            return AjaxResult<PrintOptions>.ErrorResult("没有找到打印模板");
        //        }
        //        var sql = GetPrintSql(temp.EnumPrintType);
        //        if (string.IsNullOrEmpty(sql))
        //        {
        //            return AjaxResult<PrintOptions>.ErrorResult("没有找到打印模板执行语句");
        //        }
        //        var groups = YunRmsDb.SysBasePrintTemplateVariable.AsNoTracking().Where(t => t.EnumPrintType == temp.EnumPrintType && t.PrintTemplateVariableGroup != null)
        //          .Select(m => m.PrintTemplateVariableGroup)
        //          .Distinct().ToArray();

        //        var dbHelper = new DbHelperSQLP(CurrentStore.ConnectionString);

        //        List<SqlParameter> parameter = new List<SqlParameter>(Params.Length);
        //        parameter.AddRange(Params.Select((t, i) => new SqlParameter("@Param_" + (i + 1), t)));
        //        DataSet ds = new DataSet();
        //        ds = dbHelper.Query(sql, parameter.ToArray());
        //        string body = temp.PrintTemplateContent;
        //        //单项替换
        //        body = ReplaceSingle(body, ds.Tables[0]);
        //        //循环替换
        //        body = ReplaceList(body, ds, groups);
        //        //通用替换
        //        body = CommonReplace(body);

        //        var option = new PrintOptions
        //        {
        //            Title = temp.PrintTemplateName,
        //            Content = body,
        //            IntHeight = temp.PaperHeight,
        //            IntWidth = temp.PaperWidth
        //        };
        //        return AjaxResult<PrintOptions>.SuccessResult(option);
        //    }
        //}
        //#region 打印替换

        ///// <summary>
        ///// 通用替换
        ///// </summary>
        ///// <param name="body"></param>
        ///// <returns></returns>
        //string CommonReplace(string body)
        //{
        //    body = body.Replace("【商户名称】", CurrentStore.merchant_name)
        //        .Replace("【店铺名称】", CurrentStore.StoreName)
        //        .Replace("【总店名称】", CurrentStore.ParentStoreName)
        //        .Replace("【店铺联系电话】", CurrentStore.LandlineNumber)
        //        .Replace("【店铺地址】",
        //            CurrentStore.StoreProvince + " " + CurrentStore.StoreCity + " " + CurrentStore.StoreDistrict + " " +
        //            CurrentStore.StoreAdder)
        //        .Replace("【开户行】", CurrentStore.BankName)
        //        .Replace("【账号】", CurrentStore.BankNumber)
        //        .Replace("【账户名】", CurrentStore.BankAccount)
        //        .Replace("【操作员】", CurrentEmployee.EmployeeName)
        //        .Replace("【打印时间】", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))
        //        .Replace("【打印日期】", DateTime.Now.ToString("yyyy-MM-dd"))
        //        .Replace("【操作员】", CurrentEmployee.EmployeeName);
        //    return body;
        //}

        //private string ReplaceList(string body, DataSet ds, string[] groups)
        //{
        //    foreach (string g in groups)
        //    {
        //        var dt = GetDataTable(g, ds);
        //        if (dt.Rows.Count < 1)
        //        {
        //            var index = body.IndexOf($"v-show=\"{g}\"", StringComparison.Ordinal);
        //            while (index != -1)
        //            {
        //                var startIndex = body.LastIndexOf('<', index);
        //                var endIndex = body.IndexOf('>', index);
        //                var styleIndex = body.IndexOf("style", startIndex, endIndex - startIndex, StringComparison.Ordinal);
        //                body = styleIndex == -1 ? body.Insert(endIndex, "style='display: none;'") : body.Insert(body.IndexOf('"', styleIndex) + 1, "display: none;");
        //                index = body.IndexOf($"v-show=\"{g}\"", body.IndexOf('>', startIndex), StringComparison.Ordinal);
        //            }
        //        }
        //        else
        //        {
        //            body = executeFor(body, g, dt);
        //        }
        //    }
        //    return body;
        //}

        ///// <summary>
        ///// 执行 循环替换语法
        ///// </summary>
        ///// <param name="body"></param>
        ///// <param name="PrintGroupVariableName"></param>
        ///// <param name="listPrintVariable"></param>
        ///// <param name="dt"></param>
        ///// <returns></returns>
        //string executeFor(string body, string PrintGroupVariableName, DataTable dt)
        //{
        //    string grammar = "for";
        //    List<string> HtmlTags = GetHtmlTags(body, grammar, PrintGroupVariableName);
        //    List<string> listHtml = new List<string>();
        //    string RegexString = "";
        //    string html = "";
        //    string templateHtml = "";
        //    DataColumnCollection dcs = dt.Columns;
        //    foreach (string tag in HtmlTags)//多个标签
        //    {
        //        RegexString = string.Format("(?<Title><{0} (.*(!>))?v-{1}=\"{2}\".*?>.*?</{0}>)", tag, grammar, PrintGroupVariableName);
        //        listHtml = GetRegValue(body, RegexString, "Title", false);
        //        foreach (string str in listHtml)//多个列表
        //        {
        //            html = "";
        //            templateHtml = str.Replace($"v-{grammar}=\"{PrintGroupVariableName}\"", "");
        //            foreach (DataRow dr in dt.Rows)
        //            {
        //                string template = templateHtml;
        //                foreach (DataColumn column in dt.Columns)
        //                {
        //                    try
        //                    {
        //                        template = template.Replace(
        //                            $"【{PrintGroupVariableName}.{column.ColumnName}】",
        //                        dr[column].ToString());
        //                    }
        //                    catch (Exception ex)
        //                    {
        //                        ("打印循环替换：" + PrintGroupVariableName + "." + column.ColumnName + "出错。" + ex.Msg).ExLogError();
        //                    }
        //                }
        //                html += template;
        //            }
        //            body = body.Replace(str, html);
        //        }
        //    }
        //    return body;
        //}

        ///// <summary>
        ///// 单项内容替换
        ///// </summary>
        ///// <param name="body"></param>
        ///// <param name="dt"></param>
        ///// <param name="listPrintVariable">变量</param>
        ///// <returns></returns>
        //string ReplaceSingle(string body, DataTable dt)
        //{
        //    DataColumnCollection dcs = dt.Columns;
        //    if (dt.Rows.Count == 0)
        //    {
        //        return body;
        //    }
        //    DataRow dr = dt.Rows[0];

        //    foreach (DataColumn column in dt.Columns)
        //    {
        //        try
        //        {
        //            var param = "【" + column.ColumnName + "】";
        //            body = body.Replace(param, dr[column].ToString());
        //        }
        //        catch (Exception ex)
        //        {
        //            ("打印单项内容替换：" + column.ColumnName + "出错。" + ex.Msg).ExLogError();
        //        }
        //    }
        //    return body;
        //}



        //DataTable GetDataTable(string PrintTemplateVariableGroup, DataSet ds)
        //{
        //    DataTable dt = new DataTable();
        //    foreach (DataTable d in ds.Tables)
        //    {
        //        if (d.Columns.Contains("PrintTemplateVariableGroup"))
        //        {
        //            if (d.Rows.Count > 0)
        //            {
        //                if (d.Rows[0]["PrintTemplateVariableGroup"].ToString().Equals(PrintTemplateVariableGroup))
        //                {
        //                    dt = d;
        //                    break;
        //                }
        //            }
        //        }
        //    }
        //    return dt;
        //}

        //private string GetPrintSql(EnumPrintType type)
        //{
        //    string fileDir = HttpContext.Current.Server.MapPath("~" + "/Data/Print/" + type.ToString() + ".txt");
        //    var sql = Tool.ReadFiles(fileDir);
        //    return sql;
        //}


        //#region  正则表达式取值
        ///// <summary>
        ///// 正则表达式取值
        ///// </summary>
        ///// <param name="HtmlCode">源码</param>
        ///// <param name="RegexString">正则表达式</param>
        ///// <param name="GroupKey">正则表达式分组关键字</param>
        ///// <param name="RightToLeft">是否从右到左</param>
        ///// <returns></returns>
        //public List<string> GetRegValue(string HtmlCode, string RegexString, string GroupKey, bool RightToLeft)
        //{
        //    MatchCollection m;
        //    Regex r;
        //    if (RightToLeft == true)
        //    {
        //        r = new Regex(RegexString, RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.RightToLeft);
        //    }
        //    else
        //    {
        //        r = new Regex(RegexString, RegexOptions.IgnoreCase | RegexOptions.Singleline);
        //    }
        //    m = r.Matches(HtmlCode);
        //    // string[] MatchValue = new string[m.Count];
        //    List<string> MatchValue = new List<string>();
        //    for (int i = 0; i < m.Count; i++)
        //    {
        //        MatchValue.Add(m[i].Groups[GroupKey].Value);
        //    }
        //    return MatchValue;
        //}
        //#endregion
        ///*
        // * 1、根据语法 查找标签  （语法、关键字） 返回标签组
        // * 2、替换单项内容
        // * 3、替换循环列表 执行v-for 替换语法 执行v-if 语法
        // * 4、执行v-show 语法替换
        // * 5、执行v-if 语法
        // * 6、变量分组 获取DataTable
        // */
        //List<string> GetHtmlTags(string body, string grammar, string PrintVariableName)
        //{
        //    List<string> list = new List<string>();
        //    string RegexString = string.Format("(?<Title><.*?v-{0}=\"{1}\".*?>)", grammar, PrintVariableName);
        //    List<string> HtmlTags = new List<string>();
        //    //GetRegValue(model.PrintTemplateContent, "<tr.*?v-for=\"检测详情\".*?>(?<Title>.*?)</tr>", "Title", false)
        //    //GetRegValue(model.PrintTemplateContent, "(?<Title><table.*?v-show.*?>.*?</table>)", "Title", false)
        //    list = GetRegValue(body, RegexString, "Title", true);
        //    int SpaceIndex = 0;
        //    foreach (string str in list)
        //    {
        //        SpaceIndex = str.IndexOf(' ');
        //        HtmlTags.Add(str.Substring(1, SpaceIndex - 1));
        //    }
        //    return HtmlTags;
        //}
        //#endregion
        //public AjaxResult<dynamic> GetPrintTemplateByTypeID(EnumPrintType? type)
        //{
        //    using (var db = Db)
        //    {
        //        Expression<Func<SysPrintTemplate, bool>> where = t => t.Status;
        //        if (type != null)
        //        {
        //            where = where.ExAnd(t => t.EnumPrintType == type.Value);
        //        }

        //        where = where.ExAnd(x => x.StoreID == CurrentStore.StoreID);
        //        var data = db.SysPrintTemplate.Where(where).OrderByDescending(t => t.IsDefault).Select(m => new
        //        {
        //            m.PrintTemplateID,
        //            m.PrintTemplateName,
        //            m.IsDefault,
        //            m.EnumPrintType
        //        }).ToList();
        //        return AjaxResult<dynamic>.SuccessResult(data);
        //    }
        //}

        //public AjaxResult<int> UpdateDefaultContact(int printTemplateId)
        //{
        //    using (var db = Db)
        //    {
        //        var model = db.SysPrintTemplate.FirstOrDefault(t => t.PrintTemplateID == printTemplateId && t.StoreID == CurrentStore.StoreID);
        //        if (model == null)
        //        {
        //            return AjaxResult<int>.ErrorResult(HasNoData);
        //        }
        //        model.IsDefault = true;
        //        var list = db.SysPrintTemplate.Where(
        //                  t => t.EnumPrintType == model.EnumPrintType && t.PrintTemplateID != model.PrintTemplateID && t.StoreID == CurrentStore.StoreID);
        //        foreach (SysPrintTemplate template in list)
        //        {
        //            template.IsDefault = false;
        //        }
        //        db.SaveChanges();
        //        return AjaxResult<int>.SuccessResult(printTemplateId);
        //    }
        //}

        ///// <summary>
        ///// 导入打印字段
        ///// </summary>
        ///// <param name="path"></param>
        ///// <param name="physicalApplicationPath"></param>
        ///// <returns></returns>
        //public AjaxResult<string> UpdatePrintFields(string fileName, string physicalApplicationPath)
        //{//读取上传文件
        //    var printDirectory = "Data/Print";
        //    var path = Path.Combine(physicalApplicationPath, printDirectory, "UpdateFile", fileName);
        //    var time = fileName.Split('.')[0];
        //    if (!File.Exists(path))
        //    {
        //        return AjaxResult<string>.ErrorResult("服务器不存在此文件!");
        //    }
        //    var ds = NPOIClass.ExcelToDataSet(path);
        //    if (ds.Tables.Count < 1)
        //        return AjaxResult<string>.ErrorResult("上传数据错误!");
        //    using (var db = YunRmsDb)
        //    {
        //        int count = 0;
        //        List<SysBasePrintTemplateVariable> printTemplateVariableList = new List<SysBasePrintTemplateVariable>();
        //        List<string> succeedList = new List<string>(ds.Tables.Count);
        //        foreach (DataTable dt in ds.Tables)
        //        {
        //            EnumPrintType type = EnumPrintType.合同打印;
        //            try
        //            {
        //                type = (EnumPrintType)Enum.Parse(typeof(EnumPrintType), dt.TableName);
        //            }
        //            catch (Exception ex)
        //            {
        //                return AjaxResult<string>.ErrorResult($"打印类型{dt.TableName} 不存在!");
        //            }
        //            List<KeyValueName> list = new List<KeyValueName>();
        //            //循环新建参数
        //            foreach (DataRow row in dt.Rows)
        //            {
        //                count++;
        //                var Status = row["状态"].ToString() == "启用";//参数状态
        //                var PrintTemplateVariableGroup = row["列表名"].ToString();
        //                PrintTemplateVariableGroup = PrintTemplateVariableGroup.ToUpper() == "NULL" || PrintTemplateVariableGroup == ""
        //                    ? null : PrintTemplateVariableGroup;
        //                if (row["字段名"].ToString().Trim() != "PrintTemplateVariableGroup")
        //                {
        //                    //新建参数
        //                    printTemplateVariableList.Add(new SysBasePrintTemplateVariable
        //                    {
        //                        EnumPrintType = type,
        //                        Status = Status ? 1 : 0,
        //                        Example = row["示例"].ToString(),
        //                        Remark = row["备注"].ToString(),
        //                        PrintTemplateVariableAlias = row["字段名"].ToString(),
        //                        PrintTemplateVariableGroup = PrintTemplateVariableGroup,
        //                        PrintTemplateVariableName = row["字段名"].ToString(),
        //                        PinYin = string.IsNullOrEmpty(PrintTemplateVariableGroup) ?
        //                        Tool.GetFirstPYLetter(row["字段名"].ToString()) + "|" + Tool.GetAllPYLetters(row["字段名"].ToString()) :
        //                        Tool.GetFirstPYLetter(PrintTemplateVariableGroup) + "|" + Tool.GetAllPYLetters(PrintTemplateVariableGroup)
        //                    });
        //                }
        //                //判断是否需要生成SQL语句
        //                if (dt.Columns.Contains("字段查询SQL") && dt.Columns.Contains("SQL"))
        //                {
        //                    string val = "";

        //                    //判断是否需要转换类型
        //                    if (dt.Columns.Contains("参数类型") && !string.IsNullOrEmpty(row["参数类型"].ToString()))
        //                    {
        //                        var paramType = row["参数类型"].ToString().ToLower();
        //                        var sqlParam = "(" + row["字段查询SQL"] + ")";
        //                        switch (paramType)//转换查询类型
        //                        {
        //                            case "date":
        //                                sqlParam = $"CONVERT(varchar(100),{sqlParam}, 23)";
        //                                break;
        //                            case "datetime":
        //                                sqlParam = $"CONVERT(varchar(100),{sqlParam}, 120)";
        //                                break;
        //                            default:
        //                                sqlParam = $"cast({sqlParam} as {paramType})";
        //                                break;
        //                        }
        //                        val = "\n" + sqlParam + " as '" + row["字段名"] + "' ,";
        //                    }
        //                    else
        //                    {
        //                        val = "\n" + row["字段查询SQL"] + " as '" + row["字段名"] + "' ,";
        //                    }
        //                    //判断是否为一个新的表查询
        //                    if (!string.IsNullOrEmpty(row["SQL"].ToString()))
        //                    {
        //                        if (!string.IsNullOrEmpty(row["列表名"].ToString()))
        //                        {
        //                            val = "\n'" + row["列表名"] + "' as 'PrintTemplateVariableGroup' ," + val;
        //                        }
        //                        list.Add(new KeyValueName(row["SQL"].ToString(), val));
        //                    }
        //                    else
        //                    {
        //                        list.Last().Value = list.Last().Value + val;
        //                    }
        //                }
        //            }
        //            if (dt.Columns.Contains("字段查询SQL") && dt.Columns.Contains("SQL"))
        //            {//拼接SQL
        //                var sql = list.Aggregate("", (current, valueName) => current + (string.Format(valueName.Key, valueName.Value.Trim(',')) + "\n\n\n"));

        //                List<SqlParameter> sqlParameterList = new List<SqlParameter>();
        //                for (int i = 0; i < 10; i++)
        //                {//生成测试参数
        //                    sqlParameterList.Add(new SqlParameter("@Param_" + (i + 1), i.ToString()));
        //                }
        //                try
        //                {//运行测试
        //                    db.Query(sql, sqlParameterList.ToArray());
        //                }
        //                catch (Exception ex)
        //                {
        //                    for (int i = 1; i <= 10; i++)
        //                    {
        //                        sql = sql.Replace("@Param_" + i, i.ToString());
        //                    }
        //                    var r = AjaxResult<string>.ErrorResult($"{dt.TableName}验证错误!\n" + ex.Msg);
        //                    r.R = sql;
        //                    return r;
        //                }
        //                var oldPath = Path.Combine(physicalApplicationPath, printDirectory, dt.TableName + ".txt");
        //                if (File.Exists(oldPath))
        //                {
        //                    FileInfo fi = new FileInfo(oldPath);
        //                    string dir = Path.Combine(physicalApplicationPath, printDirectory, "old");
        //                    if (Directory.Exists(dir) == false) Directory.CreateDirectory(dir);
        //                    File.Copy(oldPath, Path.Combine(dir, dt.TableName + fi.LastWriteTime.ToString("yyyyMMddHHmm") + ".txt"), true);
        //                }
        //                var file = File.CreateText(oldPath);
        //                foreach (string s in sql.Split('\n'))
        //                {
        //                    file.WriteLine(s);
        //                }
        //                file.Close();
        //            }
        //            succeedList.Add(dt.TableName);
        //        }
        //        ////移除所有参数
        //        //EFBatchOperation.For(db, db.SysBasePrintTemplateVariable).Where(t => true).Delete();
        //        ////批量新建参数
        //        //EFBatchOperation.For(db, db.SysBasePrintTemplateVariable).InsertAll(printTemplateVariableList);
        //        var R = AjaxResult<string>.SuccessResult("");
        //        R.C = count;
        //        return R;
        //    }
        //}
    }
    public class PrintOptions
    {
        public string Title { get; set; }
        public string Content { get; set; }
        public string IntWidth { get; set; } = "21.00cm";
        public string IntHeight { get; set; } = "29.70cm";
    }

    public class ExportOptions
    {
        public string Pash { get; set; }

    }


}
